//<p>给定一个数组 <code>nums</code>，编写一个函数将所有 <code>0</code> 移动到数组的末尾，同时保持非零元素的相对顺序。</p>
//
//<p><strong>请注意</strong>&nbsp;，必须在不复制数组的情况下原地对数组进行操作。</p>
//
//<p>&nbsp;</p>
//
//<p><strong>示例 1:</strong></p>
//
//<pre>
//<strong>输入:</strong> nums = <span><code>[0,1,0,3,12]</code></span>
//<strong>输出:</strong> <span><code>[1,3,12,0,0]</code></span>
//</pre>
//
//<p><strong>示例 2:</strong></p>
//
//<pre>
//<strong>输入:</strong> nums = <span><code>[0]</code></span>
//<strong>输出:</strong> <span><code>[0]</code></span></pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示</strong>:</p> 
//<meta charset="UTF-8" />
//
//<ul> 
// <li><code>1 &lt;= nums.length &lt;= 10<sup>4</sup></code></li> 
// <li><code>-2<sup>31</sup>&nbsp;&lt;= nums[i] &lt;= 2<sup>31</sup>&nbsp;- 1</code></li> 
//</ul>
//
//<p>&nbsp;</p>
//
//<p><b>进阶：</b>你能尽量减少完成的操作次数吗？</p>
//
//<div><div>Related Topics</div><div><li>数组</li><li>双指针</li></div></div><br><div><li>👍 1740</li><li>👎 0</li></div>

package com.rising.leetcode.editor.cn;

import cn.hutool.json.JSONUtil;

/**
 * 移动零
 * @author DY Rising
 * @date 2022-09-19 20:20:01
 */
public class P283_MoveZeroes{
    public static void main(String[] args) {
        //测试代码
        Solution solution = new P283_MoveZeroes().new Solution();
        //int[] nums = {1,0,1,0,3,12};
        int[] nums = {1,2,3,1};
        solution.moveZeroes(nums);
        System.out.println(JSONUtil.toJsonStr(nums));
    }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public void moveZeroes(int[] nums) {
        //双指针解法
        int zeroIndex = 0;//指向0的指针
        int notZeroIndex = 0;//指向非0的指针
        while (notZeroIndex < nums.length) {
            if (nums[notZeroIndex] != 0 && zeroIndex == notZeroIndex) {
                zeroIndex++;
                notZeroIndex++;
                continue;
            }
            if (nums[notZeroIndex] == 0) {
                notZeroIndex++;
                continue;
            }
            nums[zeroIndex] = nums[notZeroIndex];
            nums[notZeroIndex] = 0;
            zeroIndex++;
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
